package com.gosling.cloudspace.tools;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.github.yitter.contract.IdGeneratorOptions;
import com.github.yitter.idgen.YitIdHelper;

/**
 * ID工具类
 *
 * @author lihonglin
 * @date 2024/9/24 下午6:17
 */
public class IdNoUtil extends IdUtil {

    private static final IdGeneratorOptions options = new IdGeneratorOptions();

    //开始时间：2024-09-23 10:58:22
    private static final long baseTime = 1727060308127L;

    static {
        // 默认值6，限定 WorkerId 最大值为2^6-1，即默认最多支持64个节点。
        options.WorkerIdBitLength = 3;
        // 默认值6，限制每毫秒生成的ID个数。若生成速度超过5万个/秒，建议加大 SeqBitLength 到 10。
        options.SeqBitLength = 6;
        // 如果要兼容老系统的雪花算法，此处应设置为老系统的BaseTime。
        options.BaseTime = baseTime;
        //目前数据中心只有一个，WorkerId定义最大为6台机器，一个数据中心
        options.WorkerId = (short) IdUtil.getWorkerId(1, 6);
        YitIdHelper.setIdGenerator(options);
    }

    /***
     * prefix：长度自定义，建议精简
     * yymmdd：6位长度
     * nextId：15位左右，随时间增长
     * 业务前缀的长度不允许超过4位
     *
     *
     * @param prefix
     * @return
     */
    public static String nextId(String prefix) {
        return StrUtil.isBlank(prefix) ? "" : prefix + DateUtil.date().toString("yyMMdd") + YitIdHelper.nextId();
    }

    public static String nextIdWithoutDate(String prefix) {
        return StrUtil.isBlank(prefix) ? "" : prefix + YitIdHelper.nextId();
    }


    /***
     * nextId：15位左右，随时间增长
     *
     * @return
     */
    public static Long nextId() {
        return YitIdHelper.nextId();
    }


}
